package com.mmaingenieria.GestorFacturacion.model;

import com.mmaingenieria.GestorFacturacion.beans.Usuario;
import com.mmaingenieria.GestorFacturacion.enumeraciones.Rol;
import com.mmaingenieria.GestorFacturacion.model.interfaces.InterfaceUsuarioDAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.ResourceBundle;

/**
 *
 * @author Mikle
 */
public class MySqlUsuarioDAO implements InterfaceUsuarioDAO{

    
    //creamos un resouceBoundle que leera el archivo excepciones.properties
    //y segun la variable escribira una cosa u otra.
    private static ResourceBundle rb;
    
    //Construtor
    //*************************************************************************
    public MySqlUsuarioDAO() {
        //decimos que lea dicho archivo
        //rb = ResourceBundle.getBundle("com.mmaingenieria.GestorFacturacion.exceptions.excepciones");
    }
    
    
    //Metodos que hay que implementar por extender de InterfaceUsuario
    //*************************************************************************
    public synchronized ArrayList<Usuario> getUsuarios() {
        ArrayList<Usuario> listausuarios = null;//creo un arraylist de tipo usuarios
        Connection conexion = null;
        String sql = null;

        sql = "SELECT usuario_id, dni, nombre, apellido1,apellido2, usuario, password, email, date_created, estado FROM usuario";
        //sql = "SELECT * FROM usuarios";
        try {
            conexion = MySqlDAOFactory.conectar();
        } catch (Exception ex) {
        }

        try {
            PreparedStatement stmt = conexion.prepareStatement(sql);//preparas la query
            ResultSet resultadoquery = stmt.executeQuery();//realizas la query
            listausuarios = new ArrayList<Usuario>();
            while (resultadoquery.next()) {//recorres el resultado
                listausuarios.add(instanciarUsuario(resultadoquery));//por cada recordset lo pasa a usuario y lo añades a la lista
            }
        } catch (SQLException ex) {
        } finally {
            MySqlDAOFactory.desconectar(conexion);
        }

        return listausuarios;
    }
    
    
    
    
    //Metodos
    //*************************************************************************
    public Usuario instanciarUsuario(ResultSet rs) {
        Usuario usuario = null;
        try {
            usuario = new Usuario();
            usuario.setId(rs.getInt("usuario_id"));
            usuario.setDni(rs.getString("dni"));
            usuario.setNombre(rs.getString("nombre"));
            usuario.setApellido1(rs.getString("apellido1"));
            usuario.setApellido2(rs.getString("apellido2"));
            usuario.setUsuario(rs.getString("usuario"));
            usuario.setPassword(rs.getString("password"));
            usuario.setEmail(rs.getString("email"));
            usuario.setEstado(rs.getInt("estado"));
            usuario.setDateCreated(rs.getLong("date_created"));
            usuario.setRol(rs.getInt("rol"));
        } catch (SQLException ex) {
        }

        System.out.println(usuario.getNombre());
        return usuario;
    }
    
    @Override
	public Usuario getUsuarioByID(Integer usuarioId) {
		Usuario user = null;
        Connection conexion = null;
        String sql = null;

        //sql = "SELECT usuario_id, dni, nombre, apellido1,apellido2, usuario, password, email, date_created, estado FROM usuario";
        sql = "SELECT * FROM usuario WHERE usuario_id =" + usuarioId;
        try {
            conexion = MySqlDAOFactory.conectar();
        } catch (Exception ex) {
        }
		
		try{
            PreparedStatement stmt = conexion.prepareStatement(sql);//preparas la query
            ResultSet resultadoquery = stmt.executeQuery();//realizas la query
            
			while (resultadoquery.next()) {//recorres el resultado
				
				user = instanciarUsuario(resultadoquery);
            }
        } catch (SQLException ex) {
        } finally {
            MySqlDAOFactory.desconectar(conexion);
        }
		return user;
	}



	@Override
	public boolean updateUsuario(Usuario user) {

        Connection conexion = null;
        String sql = null;

        //Se realiza la sentencia de actualizar los valores recogidos en el formulario en la tabla de la BBDD
        sql = "UPDATE usuario SET dni ='" + user.getDni()
        		+ "' , nombre ='" + user.getNombre()
        		+ "' , apellido1 ='" + user.getApellido1()
        		+ "' , apellido2 ='" + user.getApellido2()
        		+ "' , usuario ='" + user.getUsuario()
        		+ "' , password ='" + user.getPassword()
        		+ "' , email ='" + user.getEmail() + 
        		"' WHERE usuario_id= " + user.getId();
        try {
            conexion = MySqlDAOFactory.conectar();
        } catch (Exception ex) {
        	ex.printStackTrace();
        }
        
		
		try{
            PreparedStatement stmt = conexion.prepareStatement(sql);//preparas la query
            int numeroRegistrosActualizados = stmt.executeUpdate();

 
        } catch (SQLException ex) {
        	ex.printStackTrace();
        } finally {
            MySqlDAOFactory.desconectar(conexion);
        }

		return false;
	}

  
}
